package hichecker.tools.event;

import hichecker.tools.event.abstract_event.AbstractTypedEvent;
import hichecker.university.UniversityPart;

import java.util.UUID;

public class HiCheckerEvent extends AbstractTypedEvent<HiCheckerEvent.EventType> {
	public enum EventType {
		UPDATE, UPDATE_ITEM_NAME, NEW_MENU_CONTENT, SWITCH, SET_VIEWED_ELEMENT
	};

	private UniversityPart item;
	private UUID newItemID;

	public HiCheckerEvent(EventType type) {
		super(type);
		newItemID = null;
	}

	/**
	 * Erzeugt ein neues Event wenn sich die Menüstruktur durch hinzufügen/entfernen von Objekten
	 * geändert hat.
	 * 
	 * @param item
	 *            Oberelement des betroffenen Menüs.
	 * @param newItemID
	 *            ID des neuen Elements (null beim löschen von Elementen)
	 */
	public static HiCheckerEvent newMenuContent(UniversityPart item, UUID newItemID) {
		HiCheckerEvent event = new HiCheckerEvent(EventType.NEW_MENU_CONTENT);
		event.item = item;
		event.newItemID = newItemID;
		return event;
	}
	
	public UniversityPart getItem() {
		return item;
	}
	
	public UUID getNewItemID() {
		return newItemID;
	}
	
	@Override
	public String toString() {
		String string = getClass().getName() + " [type=" + getEventType();
		if (getEventType() == EventType.NEW_MENU_CONTENT)
			string += ", item=\"" + item.getName() + "\", newItemID=" + newItemID;
		string += "]";
		
		return string;
	}
}
